package com.example.execption;

/**
 * 统一响应格式类型
 * 类似一个实体类，封装：响应的状态码整型，响应的描述信息，响应的时间戳，如果是查询需要响应中包含数据
 * @author Mary
 *
 */
public class ApiRestResponse<T> {

    private Integer code;
    private String meg; // 注意这里原来写成了 meg，可能是应该是 msg，需要校对一下
    private T data;

    // 对应成功的常量定义
    private final static Integer SUCCESS_OK = 200;
    private final static String SUCCESS_DESC = "处理成功";

    // 构造方法，含状态码和描述信息的初始化
    public ApiRestResponse(Integer code, String msg) {
        this.code = code;
        this.meg = msg;
    }

    // 构造方法，含状态码、描述信息和数据的初始化
    public ApiRestResponse(Integer code, String msg, T data) {
        this.code = code;
        this.meg = msg;
        this.data = data;
    }

    // 获取对应成功的 Api 响应实例，不包含数据
    public static <T> ApiRestResponse<T> success() {
        return new ApiRestResponse<>(SUCCESS_OK, SUCCESS_DESC);
    }

    // 获取对应成功的 Api 响应实例，包含数据
    public static <T> ApiRestResponse<T> success(T data) {
        return new ApiRestResponse<>(SUCCESS_OK, SUCCESS_DESC, data);
    }

    // 获取对应失败的 Api 响应实例，根据枚举类型异常
    public static <T> ApiRestResponse<T> error(TijianExceptionEnum e) {
        return new ApiRestResponse<>(e.getCode(), e.getMessage());
    }

    // 获取对应失败的 Api 响应实例，包含数据
    public static <T> ApiRestResponse<T> error(Integer code, String msg, T data) {
        return new ApiRestResponse<>(code, msg, data);
    }

    // 获取对应失败的 Api 响应实例，不包含数据
    public static <T> ApiRestResponse<T> error(Integer code, String msg) {
        return new ApiRestResponse<>(code, msg);
    }

    // Getters and setters
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMeg() {
        return meg;
    }

    public void setMeg(String msg) {
        this.meg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
